package com.课上案例练习.网络编程.Tcp编程聊天版本1;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 *
 * 版本一 实现服务器和客户端基本通讯
 */

/**
 * 客户端
 */
public class  Client {
    public static void main(String[] args) throws IOException {
        //Socket 创建连接
        //作用是创建一个Socket对象，该对象封装了客户端的IP地址和端口号
        //该类实现客户端套接字（也称为“套接字”）。 套接字是两台机器之间通讯的端点
        Socket socket = new Socket("localhost", 9999);
        //获取当前连接的输出流，发送数据
        DataOutputStream output = new DataOutputStream(socket.getOutputStream());
        output.writeUTF("hello,服务器");
    }
}

/**
 * 服务端
 */
class Server {
    public static void main(String[] args) throws IOException {
        //创建一个 ServerSocket 对象、
        //这个类实现了服务器套接字。 服务器套接字等待通过网络进入的请求。 它根据该请求执行一些操作，然后可能将结果返回给请求者。
        //Socket 没有 accept() 方法来接受客户端连接
        //Socket 不能绑定端口等待连接
        //无法实现服务器的基本功能
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务器启动成功");
        //等待客户端连接
        //Socket本身不直接处理数据读取
        //意思是
        Socket socket = serverSocket.accept();
        //获取输入流,读取数据
        //使用DataInputStream，底层使用InputStream
        //作用:
        //好处:
        // 1.支持多种数据类型读取
        // 2.数据格式标准化
        // 3.简化代码
        // 4.提高开发效率
        // 坏处: 只能处理字符串
        DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
        //readUTF()方法的作用是读取字符串
        System.out.println(dataInputStream.readUTF());
    }
}
